package loveqq.niceexcel.event;

import cn.hutool.core.util.ClassUtil;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 事件监听管理器
 *
 * @author zhongjh@tsintergy.com
 * @date 2022-08-19
 */
public class EventManager {
    /**
     * 事件监听器注册器
     */
    private final Map<Class/*事件类型*/, List<EventListener>/*监听器*/> eventListenerRegister = new HashMap<>();


    /**
     * 注册事件监听器
     *
     * @param eventListener 事件监听器
     */
    public void registerEventListener(EventListener<?> eventListener) {
        Class<?> eventType;
        if (eventListener != null && (eventType = ClassUtil.getTypeArgument(eventListener.getClass())) != null) {
            this.eventListenerRegister.computeIfAbsent(eventType, key -> new ArrayList<>()).add(eventListener);
        }
    }

    /**
     * 发布事件
     *
     * @param event 事件
     */
    public void publishEvent(Object event) {
        List<EventListener> eventListeners;
        if (event != null && (eventListeners = eventListenerRegister.get(event.getClass())) != null) {
            eventListeners.forEach(listener -> listener.onEvent(event));
        }
    }

}
